package musica;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jdom.Element;

import figuras.Figura;



public class Compas {
	private Duracion tiempoDeDuracion;
	private List<Figura> figuras;


	public Compas (Duracion duracion){
		this.tiempoDeDuracion = duracion;
		this.figuras = new ArrayList<Figura>(0);
	}
	
	/**
	 * Getter del atributo <tt>figuras</tt>
	 *
	 * @return Returns the figuras.
	 * 
	 */
	
	public List<Figura> getFiguras(){
		return figuras;
	}
	 
	/**
	 * Ensures that this collection contains the specified element 
	 *
	 * @param element whose presence in this collection is to be ensured.
	 * @see	java.util.Collection#add(Object)
	 *
	 */
	public boolean agregarFigura(Figura unaFigura){
		return this.figuras.add(unaFigura);
	}

	
	/**
	 * iterador de la lista de Figuras del Compas
	 * @return Un iterador de la lista de Figuras
	 */
	public Iterator figurasIterator(){
		return figuras.iterator();
	}
	
	public boolean compasVacio(){
		return figuras.isEmpty();
	}

	/**
	 * Carga del compas desde el archivo XML
	 * 
	 * @param element elemento XML
	 * @param duracion
	 * @return devuelve una nueva instancia de Compas con los datos del archivo XML
	 */
	public static Compas cargarDesdeXML(Element element, Duracion duracion) {
		Compas nuevoCompas = new Compas(duracion); 
		//se obtiene la cantidad de figuras del compas
		int cantidadFiguras = element.getChildren().size();
		//se recorre cada compas cargando cada figura de los mismos
		for (int i=0;i<cantidadFiguras;i++){
			Element elemenFigura = (Element)element.getChildren().get(i);
			Figura unaFigura = Figura.cargarDesdeXML(elemenFigura, duracion);
			nuevoCompas.agregarFigura(unaFigura);
		}
		return nuevoCompas;
	}
	
}


